//============================================================================
// Nombre		: GeneradorIUC.cpp
// Materia		: Organizacion de Datos (75.06) - FIUBA
// Catedra		: AZCURRA-GUTIERREZ-SANTOS
// Autor		: Tkaczyszyn, Muszalski, Gallinal, Fernandez
// Descripcion	: TPDatos , Ansi-style
//============================================================================

#ifndef GeneradorIUC_H
#define GeneradorIUC_H

#include <string>
#include <iostream>
#include "IUC.h"

using namespace std;

class GeneradorIUC
{

private:
	int 	posicionIUC;
	int 	posicionCaracteres[IUC::CANTIDAD_POSICIONES];
	IUC* 	ultimoIUC;
	IUC* 	iUCActual;
	static 	GeneradorIUC* pInstance;

public:
	//Esto es para poder referenciarlo, cuando queramos usarlo, simplemente hacemos:
	static 	GeneradorIUC*		getInstancia();

private:
	void generarIUC();
	void cambiarDigito(int i);

public:
	/**
	 * genera una clave alfanumerica, unica y secuencial.
	 */
	IUC* 	generarNuevoIUC();
	IUC*	getUltimoIUC() const;
	void 	setUltimoIUC(IUC *ultimoIUC);

private:
	GeneradorIUC(); //nunca se debe llamar al constructor de GeneradorIUC
	~GeneradorIUC();

};

#endif // GeneradorIUC_H

